package com.zbf1811a.config;

import com.zbf1811a.dao.MsgMapper;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

/**
 * @author: LCG
 * 作者: LCG
 * 日期: 2021/7/27  17:18
 * 描述: 消息发送到交换机的确认
 */
@Component
public class My11aConfirmCallback implements RabbitTemplate.ConfirmCallback {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    private MsgMapper msgMapper;

    @PostConstruct
    public void init(){
        rabbitTemplate.setConfirmCallback(this);
    }


    /**
     * 作者: LCG
     * 日期: 2021/7/27  17:20
     * 描述:
     * @Param [correlationData, 附加信息
     * b,  true 表示 OK  false 失败
     * s   表示异常信息]
     * @Return void
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean b, String s) {

        String msgId=correlationData.getId();
        Map<String,Object> map=new HashMap<>();
        map.put("id",msgId);
        if(b){
            //消息发送到交换器成功的逻辑
            map.put("status",1);
           //更新消息的状态是 1
            msgMapper.update(map);
        }else{
            //发送消息失败的时候逻辑

            map.put("status",2);
            map.put("errorMsg",s);
            msgMapper.update(map);
            //for gc
        }
        //for gc
        map=null;

    }
}
